VFORK
Section: System Calls (2)
Updated: June 30, 1985
Index
Return to Main Contents
NAME
vfork - spawn new process in a virtual memory efficient way
SYNOPSIS
pid = vfork()
int pid;
DESCRIPTION
Vfork
can be used to create new processes without fully copying the address
space of the old process, which is horrendously inefficient in a paged
environment. It is useful when the purpose of
fork(2)
would have been to create a new system context for an
execve.
Vfork
differs from
fork
in that the child borrows the parent's memory and thread of
control until a call to
execve(2)
or an exit (either by a call to
exit(2)
or abnormally.)
The parent process is suspended while the child is using its resources.
Vfork
returns 0 in the child's context and (later) the pid of the child in
the parent's context.
Vfork
can normally be used just like
fork.
It does not work, however, to return while running in the childs context
from the procedure that called
vfork
since the eventual return from
vfork
would then return to a no longer existent stack frame.
Be careful, also, to call
_exit
rather than
exit
if you can't
execve,
since
exit
will flush and close standard I/O channels, and thereby mess up the
parent processes standard I/O data structures.
(Even with
fork
it is wrong to call
exit
since buffered data would then be flushed twice.)
SEE ALSO
fork(2), execve(2), sigvec(2), wait(2),
DIAGNOSTICS
Same as for
fork.
BUGS
This system call will be eliminated when proper system sharing
mechanisms are implemented.
Users should not depend on the memory
sharing semantics of
vfork
as it will, in that case, be made synonymous to
fork.
To avoid a possible deadlock situation,
processes that are children in the middle
of a
vfork
are never sent SIGTTOU or SIGTTIN signals; rather,
output or
ioctls
are allowed
and input attempts result in an end-of-file indication.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- SEE ALSO
-
- DIAGNOSTICS
-
- BUGS
-
This document was created by
man2html,
using the manual pages.
Time: 04:51:42 GMT, January 31, 2023